package com.cuz.array;

import java.util.ArrayList;
import java.util.Arrays;

/**
 * 给定两个数组，编写一个函数来计算它们的交集。
 * 示例 1:
 * <p>
 * 输入: nums1 = [1,2,2,1], nums2 = [2,2]
 * <p>
 * 输出: [2,2]
 * 示例 2:
 * <p>
 * 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
 * <p>
 * 输出: [4,9]
 * 说明：
 * <p>
 * 输出结果中每个元素出现的次数，应与元素在两个数组中出现的次数一致。
 * 我们可以不考虑输出结果的顺序。
 * 进阶:
 * <p>
 * 如果给定的数组已经排好序呢？将如何优化你的算法呢？
 * 设定两个为0的指针，比较两个指针的元素是否相等。
 * 如果指针的元素相等，我们将两个指针一起向后移动，并且将相等的元素放入空白数组
 */
public class TheIntersectionOfTwoArrays {


    public static int[] intersectionOfTwoArrays(int[] array1, int[] array2) {
        if (array1 == null || array1.length == 0
                || array2 == null || array2.length == 0) {
            return new int[0];
        }
        Arrays.sort(array1);
        Arrays.sort(array2);
        //两个指针，从0开始，比较值，值小的指针向前，如果相同一起向前
        int indexOfArray1 = 0;
        int indexOfArray2 = 0;
        int count=0;
        int[] res=new int[Math.max(array1.length, array2.length)];
        while (indexOfArray1 < array1.length && indexOfArray2 < array2.length) {
            if (array1[indexOfArray1] == array2[indexOfArray2]) {
                res[count++]=array1[indexOfArray1];
                indexOfArray1++;
                indexOfArray2++;
            } else if (array1[indexOfArray1] < array2[indexOfArray2]){
                indexOfArray1++;
            }else {
                indexOfArray2++;
            }

        }
        return Arrays.copyOfRange(res, 0, count);
    }

    public static void main(String[] args) {
        int[]arrays1={1,1,2,5,8,9};
        int[]arrays2={2,5,7,8,9};
        int[] ints = intersectionOfTwoArrays(arrays1, arrays2);
        System.out.println(Arrays.toString(ints));
    }
}
